package org.qhhc.functioninterface;

@FunctionalInterface
interface StringTransformer {
    // 唯一抽象方法：字符串转换逻辑
    String transform(String input);

    // 默认方法（不影响函数式接口定义）
    default void log(String message) {
        System.out.println("[LOG] " + message);
    }

    // 静态方法（工具方法）
    static String reverse(String str) {
        return new StringBuilder(str).reverse().toString();
    }
}

public class FunctionZhujieTest {
    public static void main(String[] args) {
        // 1. Lambda表达式实现：字符串转大写
        StringTransformer upperCaseTransformer = s -> s.toUpperCase();
        System.out.println("转大写: " + upperCaseTransformer.transform("hello")); // HELLO
        upperCaseTransformer.log("转换完成"); // 调用默认方法

        // 2. 方法引用实现：反转字符串
        StringTransformer reverseTransformer = StringTransformer::reverse;
        System.out.println("反转字符串: " + reverseTransformer.transform("Java")); // avaJ

        // 3. 组合使用（自定义逻辑）
        StringTransformer complexTransformer = s -> {
            String reversed = StringTransformer.reverse(s);
            return reversed + "(" + s.length() + ")";
        };
        System.out.println("组合操作: " + complexTransformer.transform("Function")); // noitcnuF(8)
    }
}